Executable files are typically built from source code. Building executable files often involves, first, using a compiler to convert source code files into object files, and then, using a linker to combine the object files into an executable file, such as executable programs or libraries of routines called by programs.
Software utilities may be used to manage this process. These utilities, which are sometimes referred to as “builders,” coordinate the operation of compilers, linkers, and other tools involved in the building of software. The order in which operations are performed by these tools is specified in lists of dependencies or commands that are processed by the builder.
For example, a builder may process a dependency specification that looks very similar to the following example:
Command 1: create object_file—1 from source_file—1.
Command 2: create object_file—2 from source_file—2;
Command 3: combine object_file—1 and object_file—2 to produce an executable file.
When the builder invokes command 1 and command 2, they are executed by a compiler and result in object_file—1 and object_file—2 being created from source code. The third command, when invoked by the builder, is executed by a linker and results in the object files being combined into an executable file. Thus, the third command is said to depend on the first two, and therefore, the first two commands are executed before the third.